package com.redstar.day05_centerIndex;

import java.util.Arrays;

/**
 * 寻找数组的中心下标
 *
 * 中心下标是数组的一个下标，其左侧的所有元素相加等于右边所有的元素相加，
 * 如果没有则返回-1，如果有多个则返回左边的第一个。（也可能出现在数组的两端）
 *
 * @author lihongxing
 * @date 2021/05/12 22:18
 */
public class Test {

    /** 中心坐标的左边 * 2 + 中心坐标 = 数组所有元素之和  */
    private static int pivotIndex(int[] nums) {
        int total = Arrays.stream(nums).sum();
        System.out.println("数组之和：" + total);
        int leftSum = 0;
        for (int i = 0; i < nums.length-1; i++) {
            leftSum += nums[i];
            if (leftSum * 2 + nums[i + 1] == total) {
                return i + 1;
            }
        }
        return -1;
    }


    public static void main(String[] args) {
        int[] nums = {1,4,2,5,8,2,3,2,4,1};
        int[] nums1 = {1,7,3,6,5,6};
        System.out.println("i = " + pivotIndex(nums));
        System.out.println("i = " + pivotIndex(nums1));
        System.out.println("i = " + pivotIndex2(nums));
        System.out.println("i = " + pivotIndex2(nums1));
    }


    //方法二：(不是很明白)
    private static int pivotIndex2(int[] nums) {
        int total = Arrays.stream(nums).sum();
        System.out.println("数组之和：" + total);
        int leftSum = 0;
        for (int i = 0; i < nums.length; i++) {
            leftSum += nums[i];
            if (leftSum == total) {
                return i;
            }
            total = total - nums[i];
        }
        return -1;
    }

}
